package com.example.course.schoolGet;

public abstract class schoolBase {
    //记录教务能力，若可以执行为true，否则为false
    public boolean courseGet = true; //必选
    public boolean scoreGet = false; //可选
    public boolean gpaGet = false; //可选
    public boolean examGet = false; //可选
    public boolean needVerifyCode = false; // 是否需要验证码（目前仅支持图片验证码），需要则无法支持卡片功能，仅能用于页面内教务使用
    public String[] courseTime = new String[]{}; //课程时间串，第一个为课程1节持续时间，后续为第n节课的起始时间

    //登录函数，初始化时完成登录，返回JSON字符串或者JSONObject,如果不需要验证码，请忽视verifyCode这个参数，在需要验证码时他会带上用户输入的验证码值
    //内容包括---
    //name:String //学生姓名
    public abstract String Login(String id,String pas,String verifyCode);

    //获取最新学期的课表，返回JSON字符串或者JSONObject，错误返回null，请检测登陆过期，并在过期时重新登陆，再获取信息
    //内容格式示例：
    //{courses:[[{idx:1,name:xxx,last:"02:00",teacher:xxx,place:xxx,week:["1-16"]}],[],[],[],[],[],[]],startDate:"2021-01-04"}
    //---courses:Array<Array<Object>> 记录课程信息，内容如下：
    //idx:Number 课程索引，按照课程次序从大到小，1为第一节课，依次后推
    //name:String 课程名称
    //last:Number 课程持续时间
    //teacher:String, place:String 可选
    //week:Array<String> 可有格式 "1-16","2"
    //返回的数组必须长度为7，记录顺序为周一，周二，...，周日
    //---startDate:String 课程表的起始日期，需为周一，若无法获得请置本年第一个周一
    //---warn:String 可选，提示信息，当下载课表时将弹出
    public abstract String getCourses();

    //获取成绩，返回JSON字符串或者JSONObject，错误返回null，请检测登陆过期，并在过期时重新登陆，再获取信息
    //内容格式示例：
    //[{name:xxx,value:80}]
    //name:String 课程名称
    //value:Number/String 课程分数，可显示A+等
    public String getScores(){return null;}

    //获取学分绩，返回JSON字符串或者JSONObject，错误返回null，请检测登陆过期，并在过期时重新登陆，再获取信息
    //内容格式示例：
    //{gpa: 3.9,all:100,at:30}
    //gpa:Number 学分绩
    //all:Number 总人数，可选，无可填-1
    //at:Number 你的排名
    public String getGPA(){return null;}

    //若需要验证码，请在此函数获取验证码图片并返回
    public byte[] getVerifyCode(){return null;}

    //获取近期的考试安排，返回JSON字符串或JSONObject，错误返回null，请检测登录过期，并在过期时重新登陆，再获取信息
    //内容格式示例：
    //[{name:xxx,startDate:2021-09-20,place:xxx,time:14:40~16:40}]
    //name:String 课程名称
    //startDate:String 考试日期
    //place:String 考试地点
    //time:String 考试时间，需用 ~ 分割两段时间，呈xx:xx~xx:xx
    public String getExams(){return null;}
}
